package com.music.note_android.data.repository

import com.music.note_android.data.model.Note
import kotlinx.coroutines.flow.Flow

/**
 * 笔记数据仓库接口
 * 定义笔记数据操作的抽象接口
 */
interface NoteRepository {
    
    /**
     * 获取所有笔记
     */
    fun getAllNotes(): Flow<List<Note>>
    
    /**
     * 根据文件夹ID获取笔记
     */
    fun getNotesByFolder(folderId: String): Flow<List<Note>>
    
    /**
     * 根据ID获取笔记
     */
    suspend fun getNoteById(noteId: String): Note?
    
    /**
     * 搜索笔记
     */
    suspend fun searchNotes(query: String): List<Note>
    
    /**
     * 创建新笔记
     */
    suspend fun createNote(title: String): Note
    
    /**
     * 更新笔记
     */
    suspend fun updateNote(note: Note)
    
    /**
     * 删除笔记
     */
    suspend fun deleteNote(noteId: String)
    
    /**
     * 批量删除笔记
     */
    suspend fun deleteNotes(noteIds: List<String>)
    
    /**
     * 重命名笔记
     */
    suspend fun renameNote(noteId: String, newTitle: String)
    
    /**
     * 移动笔记到文件夹
     */
    suspend fun moveNoteToFolder(noteId: String, folderId: String?)
    
    /**
     * 批量移动笔记到文件夹
     */
    suspend fun moveNotesToFolder(noteIds: List<String>, folderId: String?)
    
    /**
     * 更新笔记缩略图
     */
    suspend fun updateNoteThumbnail(noteId: String, thumbnailPath: String)
    
    /**
     * 获取笔记总数
     */
    suspend fun getNotesCount(): Int
}